package com.example.mydy;

import android.app.Application;
import android.content.SharedPreferences;
import android.os.Build;
import android.util.Log;

import com.example.mydy.utils.LogUtils;
import com.example.mydy.utils.NetworkUtils;
import com.example.mydy.utils.SecurityUtils;

/**
 * 应用程序Application类，用于全局初始化
 */
public class MyDyApplication extends Application {
    private static final String TAG = "MyDyApplication";
    private static final String SECURE_PREFS_NAME = "MyAppSecurePrefs";
    private static MyDyApplication instance;
    private SharedPreferences secureSharedPreferences;
    
    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
        
        Log.d(TAG, "应用程序启动初始化");
        
        // 初始化日志工具类
        LogUtils.setDebug(true); // 开发阶段设置为true，发布时改为false
        
        // 如果设备支持，迁移到加密SharedPreferences
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            SecurityUtils.migrateToEncryptedPrefs(this);
        }
        
        // 检查登录状态，确保数据一致性
        checkLoginState();
        
        // 初始化安全SharedPreferences
        initSecureSharedPreferences();
        
        // 初始化网络工具类
        NetworkUtils.setBaseUrl("http://106.52.82.133:3000/");
        NetworkUtils.initRetrofit();
        Log.d(TAG, "网络工具已初始化，API地址: " + NetworkUtils.getCurrentBaseUrl());
    }
    
    /**
     * 获取应用实例
     */
    public static MyDyApplication getInstance() {
        return instance;
    }
    
    private void initSecureSharedPreferences() {
        try {
            // 这里使用普通的SharedPreferences，在实际应用中应该使用加密的SharedPreferences
            secureSharedPreferences = getSharedPreferences(SECURE_PREFS_NAME, MODE_PRIVATE);
            Log.d(TAG, "安全SharedPreferences初始化成功");
        } catch (Exception e) {
            Log.e(TAG, "初始化安全SharedPreferences失败", e);
            // 出错时使用默认SharedPreferences
            secureSharedPreferences = getSharedPreferences("fallback_prefs", MODE_PRIVATE);
        }
    }
    
    /**
     * 获取安全的SharedPreferences
     */
    public SharedPreferences getSecureSharedPreferences() {
        if (secureSharedPreferences == null) {
            Log.w(TAG, "secureSharedPreferences为null，重新初始化");
            initSecureSharedPreferences();
        }
        return secureSharedPreferences;
    }
    
    /**
     * 检查登录状态，确保数据一致性
     * 如果发现异常状态，重置登录信息
     */
    private void checkLoginState() {
        Log.d(TAG, "检查登录状态，确保数据一致性");
        
        SharedPreferences prefs = getSecureSharedPreferences();
        boolean isLoggedIn = prefs.getBoolean("isLoggedIn", false);
        String token = prefs.getString("token", "");
        String userType = prefs.getString("userType", "");
        
        // 如果登录标志为true，但令牌为空或用户类型为空，重置登录状态
        if (isLoggedIn && (token == null || token.isEmpty() || userType == null || userType.isEmpty())) {
            Log.w(TAG, "检测到异常登录状态，正在重置");
            
            SharedPreferences.Editor editor = prefs.edit();
            editor.putBoolean("isLoggedIn", false);
            editor.putString("token", "");
            editor.putString("userType", "");
            editor.commit();
            
            // 清除网络工具类中的令牌缓存
            NetworkUtils.clearRetrofit();
        }
    }
} 